package com.lewei.utils;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class CodeGenerate {
	//生成追溯码
	public static String getCode(String type,String batch){
		 String serialNo="";
    	 Date date=new Date();
    	 SimpleDateFormat sdf=new SimpleDateFormat("yyyy");
    	 String year=sdf.format(date);
    	 Map<String,Integer> map=getMap();
    	 serialNo=type+"47A"+year+batch;
    	 String codeString=CodeGenerate.getCheckCode(serialNo,map);
    	 serialNo+=codeString;
    	 System.out.println("最终codeString："+serialNo);
    	 return serialNo;
	}
	//获取追溯码最后一位校验码的数据映射关系
	public static Map<String,Integer> getMap(){
		Map<String,Integer> map=new HashMap<String,Integer>();
		map.put("0", 0);
		map.put("1", 1);
		map.put("2", 2);
		map.put("3", 3);
		map.put("4", 4);
		map.put("5", 5);
		map.put("6", 6);
		map.put("7", 7);
		map.put("8", 8);
		map.put("9", 9);
		map.put("A", 10);
		map.put("B", 11);
		map.put("C", 12);
		map.put("D", 13);
		map.put("E", 14);
		map.put("F", 15);
		map.put("G", 16);
		map.put("H", 17);
		map.put("J", 18);
		map.put("K", 19);
		map.put("L", 20);
		map.put("M", 21);
		map.put("N", 22);
		map.put("P", 23);
		map.put("R", 24);
		map.put("S", 25);
		map.put("T", 26);
		map.put("U", 27);
		map.put("V", 28);
		map.put("W", 29);
		map.put("X", 30);
		map.put("Y", 31);
		map.put("Z", 32);
		return map;
	}
	//计算最后一位校验码
	public static String getCheckCode(String traceCode,Map<String,Integer> map){
		char[] codeMappers=traceCode.toCharArray();
		int sum=0;
		for(int i=0;i<codeMappers.length;i++){
			sum+=(map.get(codeMappers[i]+"")*(i+1));
			System.out.println(map.get(codeMappers[i]+"")+"  : "+(i+1)+"    值："+(map.get(codeMappers[i]+"")*(i+1)));
		
		}
		System.out.println("输出和"+sum);
		//取余数的最后一位
		String codeString=(sum%103)+"";
		System.out.println("最终返回的校验码："+codeString.substring(codeString.length()-1,codeString.length()));
		return codeString.substring(codeString.length()-1,codeString.length());
	}
	
 public static void main(String[] args) {
	 getCode("F310","01001001");
}
}
